<?php namespace Home\Model;
use Hdphp\Model\Model;
//分类操作模型
class Category extends Model{
	//1.指定模型操作的表
	protected $table = 'category';
	
	//查看顶级分类下面所有子级的商品
	public function look($cid){
		//获得所有子级分类的cid
	    $cids = $this->getSon($this->get(),$cid);
		
		$cids = implode(',', $cids);
		
		$goodsModel = new \Common\Model\Goods;
		$goodsData = $goodsModel->where("category_cid in($cids)")->get();
		
		return $goodsData;
	}
	
	//递归获得所有子级的cid
	//$data 是分类的所有数据
	//$cid 是当前分类的cid
	public function getSon($data,$cid){
		$temp = array();
		foreach ($data as $v) {
			//找到了子集
			//如果一个分类里面的pid等于get过来的cid
			if($v['pid'] == $cid){
				//就把这个分类添加到数组里面
				$temp[] = $v['cid'];
				//合并数组
				//再次调用自己就是递归了
				$temp = array_merge($temp,$this->getSon($data,$v['cid']));
			}
		}
		//最后把这个数组反出去
	    return $temp;
	}
	
	//获得所有数据
	public function getAll(){
		//定义静态变量，用来缓存里面的数据
		static $cateData = NULL;
		//如果为真的话就证明缓存有值，直接反出去
		if($cateData) return $cateData;
		
		//没有的话就，获取缓存
		$data = S('category');
		//如果缓存不存在，那么查询数据库，重新设置缓存
		if(!$data){
			//查询到顶级分类的所有商品
			$cateData = $this->where("pid=0")->get();
//			sp($cateData);
			//定义一个空数组，用来存重组之后的数据
			$data = array();
			//遍历顶级分类，给顶级分类里面加一个字段
			foreach ($cateData as $k => $v) {
				$data[$k]['cid'] = $v['cid'];
				$data[$k]['cname'] = $v['cname'];
				$data[$k]['pid'] = $v['pid'];
				$data[$k]['csort'] = $v['csort'];
				$data[$k]['list_class'] = $v['list_class'];
				//获得二级分类
				$secondData = $this->where("pid = {$v['cid']}")->get();
				$data[$k]['son'] = $secondData;
			}
//			sp($data);
			//设置缓存
			//把重组后的数组存入缓存中
			S('category',$data);
		}
		//存入静态变量
		$cateData = $data;
		return $data;
	}
	
	//改变的时候，清楚一下缓存
	public function updateCache(){
	    //清除缓存
	    Cache::del('category');
  	}
}




 ?>